const express = require('express')
const CryptoJS = require('crypto-js')
const User = require('../models/user')
const router = express.Router()

// 查询用户
router.get('/:_id?', (req, res, next) => {
  // 获取查询单个用户的 _id
  const { _id } = req.params
  if (typeof _id !== 'undefined') {
    // 有传递 _id，则根据主键查询用户
    User
      .findById(_id)
      .then(data => {
        res.json({
          code: 200,
          data
        })
      })
  } else {
    // 没有传递 _id，则分页查询用户数据
    // page - 页码   pageSize - 每页显示记录数
    const {page = 1, pageSize = 10} = req.query
    User
      .find()
      .limit(pageSize)
      .skip((page - 1) * pageSize)
      .then(data => {
        res.json({
          code: 200,
          data: {
            users: data
          }
        })
      })
  }
})

// 添加用户
router.post('/', (req, res, next) => {
  // 从请求主体中解构用户信息
  const {username, password, name, sex, address, birthday} = req.body

  // 对密码进行加密
  const hash = CryptoJS.MD5(password).toString()
  // console.log('加密结果：', hash)
  // res.send(hash)

  // 根据 UserModel 创建实例
  const user = new User({username, password: hash, name, sex, address, birthday})
  // 保存到数据库
  user.save().then(data => {
    res.json({
      code: 200,
      data
    })
  })
})

// 修改用户
// /:_id 这个 _id 是动态路径参数，使用 :xxx 来定义的，利用 / 与URL 中的上级分隔
router.put('/:_id', (req, res, next) => {
  // 从请求中获取动态路径参数值
  const { _id } = req.params
  // 从请求中获取待修改的数据
  const { name, address, username, sex } = req.body
  // 实现数据库修改
  User
    .updateOne({_id}, {name, address, username, sex})
    .then(data => {
      res.json({
        code: 200,
        data
      })
    })
})

// 删除用户
router.delete('/:_id', (req, res, next) => {
  const { _id } = req.params
  // 从数据库中删除
  User
    .remove({_id})
    .then(data => {
      res.json({
        code: 200,
        data
      })
    })
})

module.exports = router
